package com.huyun.web.concurrency.threadLocal;

/**
 * ThreadLocal提供线程级别的变量.这些变量不同于它们正常下的变量副本,
 * 在每一个线程中都有它自己获取方式(通过它的get和set方法)，不依赖变量副本的初始化。
 * 它的实例通常都是私有的静态的，用于关联线程的上下文。
 * ​ 这些变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量
 * <p>
 * ​ 总结：ThreadLocal的作用是提供线程内部的局部变量，这种变量只存在线程的生命周期。
 */
public class RequestHolder {

    private final static ThreadLocal<Long> requestHolder = new ThreadLocal<>();

    public static void add(Long id) {
        requestHolder.set(id);
    }

    public static Long getId() {
        return requestHolder.get();
    }

    public static void remove() {
        requestHolder.remove();
    }
}
